import requests
import csv
from bs4 import BeautifulSoup
import pandas as pd

# 使用Python内置的open函数打开一个名为'房源信息.csv'的文件，以写入模式('w')打开
# 编码方式设置为'utf-8-sig'，这主要是为了在文件开头添加BOM（Byte Order Mark），以兼容一些特殊的文本处理软件
# newline=''参数用于在写入时不自动转换换行符，保持原始格式
file_obj = open('房源信息.csv', 'w', encoding='utf-8-sig', newline='')
# 导入Python内置的csv模块，并创建一个csv写入对象，该对象会写入到之前打开的文件对象中
csv_obj = csv.writer(file_obj)
# 使用csv写入对象的writerow方法，写入一行数据，这里写入的是房源信息的标题行
# 这行数据包括'标题', '户型', '面积', '地址', '价格'这五个字段，作为后续房源信息的表头
csv_obj.writerow(['标题', '户型', '面积', '地址', '价格'])
# 爬取链接
hd = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0'
}


for page in range(1, 50):
    if page == 1:
        url = 'https://gy.zu.anjuke.com/fangyuan/p2/?kw='
    else:
        url = 'https://gy.zu.anjuke.com/fangyuan/p{}/?kw='.format(page)
    print(url)
# 头部信息
    res = requests.get(url, headers=hd)
     # print(url)
# 输出源码
# print(res.text)
# 将响应文本写入文件
    soup = BeautifulSoup(res.text, 'html.parser')
    # print(soup)
# print(soup)
# 对 soup 对象进行操作...
# 查找房源信息
    rent_info = soup.find_all('div', class_='zu-itemmod')  # 找到class为的<div>标签
    # print(rent_info)
    for rent_info in rent_info:
    # 提取标题
        title = rent_info.find('b', class_='strongbox').text.strip()
        rooms = rent_info.find('p', class_='details-item').text.strip()
        # 分割户型
        huxing = rooms.split('|')[0]

        # shi=rooms.split('|')[0].split('室')[0]
        # ting=rooms.split('|')[0].split('室')[1].split('厅')[0]
        mian=rooms.split('|')[1].replace('平米','')
        address=rent_info.find('address',attrs={'class':'details-item'}).text.replace(' ','').replace('\n','')
        price=rent_info.find('strong',attrs={'class':'price'}).text
    # details-item tag
        csv_obj.writerow([title,huxing,mian,address,price])
df = pd.read_csv('房源信息.csv')
data = df.drop_duplicates()
print(data)